From 8fb4b1373079503686d7cfd8f23290b0c47c2126 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Fri, 25 Nov 2011 14:35:11 +0100 Subject: [PATCH] css: Break out enum parse/print helper We need this to parse non-GValue enums --- gtk/gtkstyleproperty.c | 66 +++++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 23 deletions(-) diff --git a/gtk/gtkstyleproperty.c b/gtk/gtkstyleproperty.c index b904dc7cb0..0aed216340 100644 --- a/gtk/gtkstyleproperty.c +++ b/gtk/gtkstyleproperty.c @@ -113,6 +113,47 @@ string_append_string (GString *str, /*** IMPLEMENTATIONS ***/ static gboolean +enum_parse (GtkCssParser *parser, + GType type, + int *res) +{ + char *str; + + if (_gtk_css_parser_try_enum (parser, type, res)) + return TRUE; + + str = _gtk_css_parser_try_ident (parser, TRUE); + if (str == NULL) + { + _gtk_css_parser_error (parser, "Expected an identifier"); + return FALSE; + } + + _gtk_css_parser_error (parser, + "Unknown value '%s' for enum type '%s'", + str, g_type_name (type)); + g_free (str); + + return FALSE; +} + +static void +enum_print (int value, + GType type, + GString *string) +{ + GEnumClass *enum_class; + GEnumValue *enum_value; + + enum_class = g_type_class_ref (type); + enum_value = g_enum_get_value (enum_class, value); + + g_string_append (string, enum_value->value_nick); + + g_type_class_unref (enum_class); +} + +static gboolean rgba_value_parse (GtkCssParser *parser, GFile *base, GValue *value) @@ -1360,27 +1401,14 @@ enum_value_parse (GtkCssParser *parser, GFile *base, GValue *value) { - char *str; int v; - if (_gtk_css_parser_try_enum (parser, G_VALUE_TYPE (value), &v)) + if (enum_parse (parser, G_VALUE_TYPE (value), &v)) { g_value_set_enum (value, v); return TRUE; } - str = _gtk_css_parser_try_ident (parser, TRUE); - if (str == NULL) - { - _gtk_css_parser_error (parser, "Expected an identifier"); - return FALSE; - } - - _gtk_css_parser_error (parser, - "Unknown value '%s' for enum type '%s'", - str, g_type_name (G_VALUE_TYPE (value))); - g_free (str); - return FALSE; } @@ -1388,15 +1416,7 @@ static void enum_value_print (const GValue *value, GString *string) { - GEnumClass *enum_class; - GEnumValue *enum_value; - - enum_class = g_type_class_ref (G_VALUE_TYPE (value)); - enum_value = g_enum_get_value (enum_class, g_value_get_enum (value)); - - g_string_append (string, enum_value->value_nick); - - g_type_class_unref (enum_class); + enum_print (g_value_get_enum (value), G_VALUE_TYPE (value), string); } static gboolean -- 2.30.2